// PROGRAMA : TABPE003
// BIBLIOTECA : PRODETR
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : SEJUSP - SEC. DA JUSTICA E SEGURANCA PUBLICA
// INSTITUTO DE IDENTIFICACAO, DETRAN E SEFAZ
// PROGRAMADOR : EDU/FM DATA: 27/05/92
// OBJETIVO : RELATORIO TABELA 18.
// ATUALIZACOES DATA
// PROGRAMA : TABPE003 11/11/1997
// BIBLIOTECA : PRODETR
// PROGRAMADOR :
// OBJETIVO : ADAPTACAO PARA O SHOPPING DO CIDADAO (P200)
// : ALTERACAO DA TELA E DATAS (N6) PARA (N8)
// EM 20/10/1999
// OBS : ESTE PROGRAMA FOI REESTRUTURADO POR SOLON MIRANDA
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.io.FileNotFoundException;
import java.text.ParseException;

import net.sf.jasperreports.engine.JRException;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.interceptor.download.InputStreamDownload;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Tabpe003Report;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Tabpe003B;
import br.com.vti.sisp_sicrim.antigo.model.SicTabelas;
import br.com.vti.sisp_sicrim.antigo.model.Sisll001;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Tabpe003 OBJETIVO : RELATORIO TABELA 18. *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/tabpe003")
public class Tabpe003 {
	// Views utilizadas
	SicTabelas vwDvetab = new SicTabelas();
	SicTabelas vwTabele = new SicTabelas();
	// Telas/relatorios utilizados
	Tabpe003B tabpe003B;
	Tabpe003Report report;
	// Includes utilizados
	Sisll001 sisll001 = new Sisll001();
	// Areas globais / session
	Sisgsisp sisgsisp;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Tabpe003 tabpe003Anterior;
	String faseproc = "0";
	private int cod2 = 0;
	private String tab2 = "";
	private String jDescricao = "";
	String tabdec = "";

	private Tabpe003B preMapas() throws ParseException {

		tabpe003B = new Tabpe003B(true, sessao);

		return tabpe003B;
	}

	public Tabpe003(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public InputStreamDownload executar(Tabpe003B tabpe003B, String tabdec) {
		try {
			return main(tabpe003B, tabdec);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroSiscerro(e, sessao, this.getClass().getSimpleName());
		}

		return null;
	}

	private InputStreamDownload main(Tabpe003B ptabpe003B, String ptabdec) throws ParseException, JRException, FileNotFoundException {
		int ind = 0;
		if (ptabpe003B == null) {
			primeiraVez = true;
			// tabpe003B = new Tabpe003B (primeiraVez);
			tabpe003B = preMapas();
			tabpe003B.setNavegar("../tabpe003/executar");
			tabdec = ptabdec;
			result.include("tabpe003B", tabpe003B);
			sessao.setAtributo("TABPE003", this);
			tabpe003B.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		} else {
			restaurarEstados(ptabpe003B);
		}

		report = new Tabpe003Report();
		report.setDataCorrente(UtilBean.inverteDataCorrente());
		report.setPageSize(60);
		report.setLineSize(133);
		for (ind = 1; ind <= 30; ind++) {
			report.setAcs(ind, " ");
		}
		for (ind = 1; ind <= 3; ind++) {
			report.setJtotais(ind, " ");
		}

		// tabpe003B.receberTela(false, result);
		// sessao.setAtributo("TABPE003", this);
		// result.include("tabpe003B", tabpe003B);
		// tabpe003B.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
		// DEFINE PRINTER(EFM = 1)
		vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 0, 3, "N", 18);
		vwDvetab.pesq = UtilBean.moveSubstring(vwDvetab.pesq, 3, 12, "N", 0);

		if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
			funcoes.retornarModulo(result, sessao);
			return null;
		}
		switch (sessao.getSisgsisp().getOperacao()) {
		case "ETD": {
			cod2 = Integer.parseInt(UtilBean.subStr(tabdec, 0, 3));
			tab2 = UtilBean.subStr(tabdec, 3, 60);
			while (vwDvetab.leituraTabdecMaiorig(cod2, tab2)) {
				// READADA
				if (!tabpe003B.getJopcao().trim().equals("")) {

					jDescricao = vwDvetab.getDescricaoElem();
					if (tabpe003B.getJopcao().equals("E")) {
						if (!(tabpe003B.getJopcao() == UtilBean.subStr(jDescricao, 30, 1))) {
							continue;
						}
					} else {
						if (UtilBean.subStr(jDescricao, 30, 1).equals("E")) {
							continue;
						}
					}
				}
				if (vwDvetab.getCodigoTabela().intValue() != 18) {
					break;
				}

				jDescricao = vwDvetab.getDescricaoElem();
				if (tabpe003B.getSetor() > 0) {
					if (!(vwTabele.getDataApoio() == tabpe003B.getSetor())) {
						continue;
					}
				}
				mostra();
			}

			break;
		}
		case "ETC": {
			while (vwDvetab.leituraTabeleMaiorig(18, 0L)) {
				// READADA
				if (!tabpe003B.getJopcao().trim().equals("")) {

					jDescricao = vwDvetab.getDescricaoElem();
					if (tabpe003B.getJopcao().equals("E")) {
						if (!(tabpe003B.getJopcao().trim().equals(UtilBean.subStr(jDescricao, 30, 1)))) {
							continue;
						}
					} else {
						if (UtilBean.subStr(jDescricao, 30, 1).equals("E")) {
							continue;
						}
					}
				}
				if (vwDvetab.getCodigoTabela() != 18) {
					break;
				}
				if (tabpe003B.getSetor() > 0) {
					if (!(vwDvetab.getDataApoio() == tabpe003B.getSetor())) {
						continue;
					}
				}
				mostra();
			}

			break;
		}
		default: {
			break;
		}
		}

		report.setTger(report.getTatv() + report.getTdel());
		report.gravaRelatorio(3);
		return report.imprimir();
		// RELATORIO
	}

	private void mostra() throws ParseException, JRException {
		report.setCodele(String.valueOf(vwDvetab.getCodigoElem()));
		report.setDescri(vwDvetab.getDescricaoElem());
		report.setDatapo(String.valueOf(vwDvetab.getDataApoio()));
		report.setDintabDatatu(vwDvetab.getDataAtualizacao());
		report.setDintabMatfun(vwDvetab.getMatriculaFunc());
		report.setMatr(String.valueOf(UtilBean.extraiDigitos(vwDvetab.getCodigoElem(), 12, 6, 7)));
		report.setNome(UtilBean.subStr(vwDvetab.getDescricaoElem(), 0, 30));
		report.setOrg(String.valueOf(UtilBean.extraiDigitos(vwDvetab.getDataApoio(), 8, 7, 2)));
		if (tabpe003B.getJopcao().trim().equals("")) {

			report.setJtotais(1, "TOTAL ATIVO    - ");
			report.setJtotais(2, "TOTAL EXCLUIDO - ");
			report.setJtotais(3, "TOTAL GERAL    - ");
		} else {
			if (tabpe003B.getJopcao().equals("E")) {

				report.setJtotais(1, "                 ");
				report.setJtotais(2, "TOTAL EXCLUIDO - ");
				report.setJtotais(3, "TOTAL GERAL    - ");
			} else {

				report.setJtotais(1, "TOTAL ATIVO    - ");
				report.setJtotais(3, "TOTAL GERAL    - ");
			}
		}
		switch (report.getAcs(1)) {
		case "A":
		case "I": {
			report.setTatv(report.getTatv() + 1);
			break;
		}
		case "E": {
			report.setTdel(report.getTdel() + 1);
			break;
		}
		default: {
			break;
		}
		}
		// RELATORIO 1 PS=60 LS=133 SG=ON
		// RELATORIO
		report.gravaRelatorio(2);
		// RELATORIO
		report.descri = "";
		report.codele = "";
	}

	private void restaurarEstados(Tabpe003B ptabpe003B) {
		this.tabpe003Anterior = (Tabpe003) sessao.getAtributo("TABPE003");
		if (ptabpe003B != null) {
			tabpe003B = ptabpe003B;
		} else {
			tabpe003B = this.tabpe003Anterior.tabpe003B;
		}
		tabpe003B.setSessao(sessao);
		this.faseproc = this.tabpe003Anterior.faseproc;
		this.tabdec = this.tabpe003Anterior.tabdec;
	}
}
